home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / glass / glass.lha / GLASS / glue / glue.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-01-31  |  8.0 KB  |  262 lines

  1.  
  2. /*
  3.  
  4.     This file is a part of the GLASS source distribution 
  5.     and therefore subjected to the copy notice below. 
  6.     
  7.     Copyright (C) 1989,1990  S.J. Klaver, R Doesborg
  8.               email: simon@sagan.nl
  9.  
  10.     This program is free software; you can redistribute it and/or modify
  11.     it under the terms of the GNU General Public License as published by
  12.     the Free Software Foundation version 1
  13.  
  14.     This program is distributed in the hope that it will be useful,
  15.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17.     GNU General Public License for more details.
  18.  
  19.     You should have received a copy of the GNU General Public License
  20.     along with this program; if not, write to the Free Software
  21.     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  22. */
  23. #include <stdio.h>
  24. #include <tmc.h>
  25. #include <curses.h>
  26. #include "envir.h"
  27. #include "gconst.h"
  28. #include "menuds.h"
  29. #include "handlemenu.h"
  30. #include "checkglue.h"
  31. #include "globalvars.h"
  32. #include "tctypes.h"
  33. #include "tc.h"
  34.  
  35. /* The following two declarations suppress warning messages */
  36. extern char *malloc();
  37. extern char *strcpy();
  38. enum { YES = 1, NO = 0};
  39.  
  40. /********************************************************/
  41. /* Read_options reads and checks command line options   */
  42. /********************************************************/
  43. int read_options (argc, argv)
  44.   int argc;
  45.   char *argv[];
  46. {
  47.   char *hargv;
  48.   int err = 0;
  49.  
  50.   /* Before reading the options, initialize all globals */
  51.   cshell = NO;
  52.   inputfilename = NULL;
  53.   outputfilename = NULL;
  54.   mainmenuid = 0;
  55.   mainparid = 0;
  56.  
  57.   argv++;                     /* skip the program name */
  58.   argc--;
  59.   while (argc>0) {
  60.     if (**argv != '-') {
  61.       printf("Illegal argument: %s\n", *argv);
  62.       printf("Use glue -x for help.\n");
  63.       err=1;
  64.     }
  65.     else {
  66.       hargv = *argv;
  67.       hargv++;             /* skip the character '-' */
  68.       switch (*hargv) {
  69.         case 'i':
  70.           argv++;
  71.           argc--;
  72.           if (argc>0) {
  73.             inputfilename = malloc(strlen(*argv)+1);
  74.             strcpy(inputfilename, *argv);
  75.           }
  76.           else {
  77.             printf("Not enough arguments\n");
  78.             err = 1;
  79.           }
  80.           break;
  81.         case 'o':
  82.           argv++;
  83.           argc--;
  84.           if (argc>0) {
  85.             outputfilename = malloc(strlen(*argv)+1);
  86.             strcpy(outputfilename, *argv);
  87.           }
  88.           else {
  89.             printf("Not enough arguments\n");
  90.             err = 1;
  91.           }
  92.           break;
  93.         case 'c':
  94.           cshell = YES;
  95.           break;
  96.         case 'm':
  97.           hargv++;
  98.           if (*hargv == (char)0) {
  99.             argv++;
  100.             argc--;
  101.             hargv = *argv;
  102.           }
  103.           mainmenuid = atoi(hargv);
  104.           break;
  105.         case 'p':
  106.           hargv++;
  107.           if (*hargv == (char)0) {
  108.             argv++;
  109.             argc--;
  110.             hargv = *argv;
  111.           }
  112.           mainparid = atoi(hargv);
  113.           break;
  114.         case 'x':
  115.           printf("Usage:  glue <options>\n\n");
  116.           printf("Possible options are:\n\n");
  117.           printf("   -i file : use file as menu data file.\n");
  118.           printf("   -m n    : start with menu n as main menu.\n");
  119.           printf("   -p n    : only ask for parameter set n.\n");
  120.           printf("   -c      : use cshell for shell escapes.\n");
  121.           printf("   -o file : use file as parameter output file.\n");
  122.           printf("   -x      : this help information.\n");
  123.           err = 1;
  124.           break;
  125.         default:
  126.           printf("The option -%c is not defined\n", *hargv);
  127.           printf("Usage:  glue <options>\n\n");
  128.           printf("Possible options are:\n\n");
  129.           printf("   -i file : use file as menu data file.\n");
  130.           printf("   -m n    : start with menu n as main menu.\n");
  131.           printf("   -p n    : only ask for parameter set n.\n");
  132.           printf("   -c      : use cshell for shell escapes.\n");
  133.           printf("   -o file : use file as parameter output file.\n");
  134.           printf("   -x      : this help information.\n");
  135.           err = 1;
  136.           break;
  137.       }
  138.     }
  139.     argv++;
  140.     argc--;
  141.   }
  142.   return(err);
  143. }
  144.  
  145.  
  146. /**********************************************************/
  147. /*                                                        */
  148. /* GLUE main program.                                     */
  149. /*                                                        */
  150. /* Allowed parameters:                                    */
  151. /*  -i infile   : input file                              */
  152. /*  -o outfile  : parameter settings output file          */
  153. /*  -c          : use csh for parameter setting syntax    */
  154. /*              : and for shell escapes                   */
  155. /*  -m n        : n is number of main menu                */
  156. /*  -p n        : n is number of main parameter set       */
  157. /*                                                        */
  158. /**********************************************************/
  159.  
  160. int main (argc, argv)
  161.   int argc;
  162.   char *argv[];
  163. {
  164.   gluefile gl;
  165.   FILE *infile;
  166.   char *str;
  167.  
  168.   /* termcap variables               */
  169.   char *termtype, *bp, *termcapbuf;
  170.   int res;
  171.   keystrings ks;
  172.   /* termcap variables end           */
  173.   /* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ */
  174.   
  175.   str = (char *)malloc(100);
  176.   sprintf(str, "MAINDIR=%s", MAINDIR);
  177.   putenv(str);
  178.  
  179.   /* Reading command line options         */
  180.   if (read_options(argc, argv)) exit(1);   
  181.   /* Command line options read            */
  182.   /* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ */
  183.  
  184.   /* The following reads the menus input file. Default file name */
  185.   /* is "glass-menu.dat". This can be overrule with glue -m            */
  186.  
  187.   if (inputfilename==NULL) {
  188.     char filename[256];
  189.     strcpy(filename,LIBDIR);
  190.     strcat(filename,"/glass-menu.dat");
  191.     infile = fopen(filename, "r");
  192.     if (infile == NULL) {
  193.       fprintf(stderr,"glue: %s: No such file\n",filename);
  194.       exit(1);
  195.     }
  196.   }
  197.   else
  198.     infile = fopen(inputfilename, "r");
  199.   if (infile != NULL) {
  200.     if (fscan_gluefile(infile, &gl) == 1) {
  201.       printf("\nGLUE-E, Errors during compilation of menu description\n");
  202.       exit(1);
  203.     }
  204.   }
  205.   else {
  206.     printf("GLUE-E, Can't find file %s", 
  207.                          (inputfilename==NULL) ? "glass-menu.dat" : inputfilename);
  208.     exit(1);
  209.   }
  210.   fclose(infile);
  211.   /* Menus read                                               */
  212.   /* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ */
  213.  
  214.   if (check_glueds (gl, mainparid)) {
  215.     printf("\nGLUE-E, Data structure inconsistency\n");
  216.     printf("GLUE-E, Check ");
  217.     if (inputfilename==NULL)
  218.       printf("glass-menu.dat\n");
  219.     else
  220.       printf(inputfilename);
  221.     exit(1);
  222.   }
  223.   /* Menus read and checked                                   */
  224.   /* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ */
  225.  
  226.   /* termcap routines                                         */
  227.   /* The following code reads the terminal type and reads     */
  228.   /* terminal dependent information from the termcap database */
  229.  
  230.   termtype = (char *) getenv ("TERM");
  231.   /* printf ("Terminal type is %s\n", termtype); */
  232.   bp = (char*) malloc (1024);
  233.   /* the bp value should be retained throughout the program   */
  234.   res = tgetent (bp, termtype);   
  235.   switch (res) {
  236.     case -1: printf ("Termcap file cannot be opened.\n"); break;
  237.     case 0:  printf ("No entry for this terminal.\n"); break;
  238.     case 1: ;  /* printf ("Termcap file opened.\n"); */
  239.   }
  240.   termcapbuf = (char*) malloc (1000); 
  241.   /* strings returned by termcap routines go to this buffer   */
  242.   initkeystrings (&ks, &termcapbuf);
  243.   initattrstrings (&termcapbuf);
  244.   /* End of termcap code                                      */
  245.   /* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ */
  246.  
  247.   if (mainparid == 0) {
  248.     parms_to_envir(gl);        /* put all defaults in environment */
  249.     start_menu(gl, mainmenuid);
  250.   }
  251.   else {
  252.     init_screen();
  253.     handle_parms (gl, mainparid, PARMLINEPAR);
  254.     if (outputfilename == NULL)
  255.       parms_to_file (gl, mainparid, "setpars", cshell); 
  256.     else 
  257.       parms_to_file (gl, mainparid, outputfilename, cshell); 
  258.     endwin();
  259.   }
  260.   exit(0);
  261. }
  262.